home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
IRIX 6.2 Development Libraries
/
SGI IRIX 6.2 Development Libraries.iso
/
dist
/
complib.idb
/
usr
/
share
/
catman
/
p_man
/
cat3
/
complib
/
sstevd.z
/
sstevd
Wrap
Text File
|
1996-03-14
|
4KB
|
133 lines
SSSSSSSSTTTTEEEEVVVVDDDD((((3333FFFF)))) SSSSSSSSTTTTEEEEVVVVDDDD((((3333FFFF))))
NNNNAAAAMMMMEEEE
SSTEVD - compute all eigenvalues and, optionally, eigenvectors of a real
symmetric tridiagonal matrix
SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
SUBROUTINE SSTEVD( JOBZ, N, D, E, Z, LDZ, WORK, LWORK, IWORK, LIWORK,
INFO )
CHARACTER JOBZ
INTEGER INFO, LDZ, LIWORK, LWORK, N
INTEGER IWORK( * )
REAL D( * ), E( * ), WORK( * ), Z( LDZ, * )
PPPPUUUURRRRPPPPOOOOSSSSEEEE
SSTEVD computes all eigenvalues and, optionally, eigenvectors of a real
symmetric tridiagonal matrix. If eigenvectors are desired, it uses a
divide and conquer algorithm.
The divide and conquer algorithm makes very mild assumptions about
floating point arithmetic. It will work on machines with a guard digit in
add/subtract, or on those binary machines without guard digits which
subtract like the Cray X-MP, Cray Y-MP, Cray C-90, or Cray-2. It could
conceivably fail on hexadecimal or decimal machines without guard digits,
but we know of none.
AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS
JOBZ (input) CHARACTER*1
= 'N': Compute eigenvalues only;
= 'V': Compute eigenvalues and eigenvectors.
N (input) INTEGER
The order of the matrix. N >= 0.
D (input/output) REAL array, dimension (N)
On entry, the n diagonal elements of the tridiagonal matrix A.
On exit, if INFO = 0, the eigenvalues in ascending order.
E (input/output) REAL array, dimension (N)
On entry, the (n-1) subdiagonal elements of the tridiagonal
matrix A, stored in elements 1 to N-1 of E; E(N) need not be set,
but is used by the routine. On exit, the contents of E are
destroyed.
Z (output) REAL array, dimension (LDZ, N)
If JOBZ = 'V', then if INFO = 0, Z contains the orthonormal
eigenvectors of the matrix A, with the i-th column of Z holding
the eigenvector associated with D(i). If JOBZ = 'N', then Z is
not referenced.
PPPPaaaaggggeeee 1111
SSSSSSSSTTTTEEEEVVVVDDDD((((3333FFFF)))) SSSSSSSSTTTTEEEEVVVVDDDD((((3333FFFF))))
LDZ (input) INTEGER
The leading dimension of the array Z. LDZ >= 1, and if JOBZ =
'V', LDZ >= max(1,N).
WORK (workspace/output) REAL array,
dimension (LWORK) On exit, if LWORK > 0, WORK(1) returns the
optimal LWORK.
LWORK (input) INTEGER
The dimension of the array WORK. If JOBZ = 'N' or N <= 1 then
LWORK must be at least 1. If JOBZ = 'V' and N > 1 then LWORK
must be at least ( 1 + 3*N + 2*N*lg N + 2*N**2 ), where lg( N ) =
smallest integer k such that 2**k >= N.
IWORK (workspace/output) INTEGER array, dimension (LIWORK)
On exit, if LIWORK > 0, IWORK(1) returns the optimal LIWORK.
LIWORK (input) INTEGER
The dimension of the array IWORK. If JOBZ = 'N' or N <= 1 then
LIWORK must be at least 1. If JOBZ = 'V' and N > 1 then LIWORK
must be at least 2+5*N.
INFO (output) INTEGER
= 0: successful exit
< 0: if INFO = -i, the i-th argument had an illegal value
> 0: if INFO = i, the algorithm failed to converge; i off-
diagonal elements of E did not converge to zero.
PPPPaaaaggggeeee 2222